package ${packageName};

<#list imports as import>
import ${import};
</#list>

/**   
 * @InterfaceName:  IBiz${underlineToCamel(sourceTable?lower_case,true?string)}   
 * @Description:TODO(商业实体对象:C${underlineToCamel(sourceTable?lower_case,true?string)}Entity 对应提供的服务接口)
 * @author: 初始由代码生成器生成
 * @date:   ${.now}
 * @version V1.0
 * @Copyright: Copyright (c) ${.now ? string('yyyy')}
 * 申明：本内容未经授权,禁止外泄以及用于其他的商业项目.
 */
public interface IBiz${underlineToCamel(sourceTable?lower_case,true?string)} {

	/**
	 * 通用的搜索方法：得到所有的实体对象集合
	 * @param filter 过滤条件的Map键值对
	 * @return 返回查找到的C${underlineToCamel(sourceTable?lower_case,true?string)}Entity 实体对象集合
	 * @throws Exception
	 */
	public EntityCollection getEntityCollection(Map<String,Object> filter) throws Exception;
	
	/**
	 * 通用的搜索方法：得到所有的实体对象集合列表
	 * @param filter 过滤条件的Map键值对
	 * @return 返回查找到的C${underlineToCamel(sourceTable?lower_case,true?string)}Entity 实体对象集合列表
	 * @throws Exception
	 */
	public List<C${underlineToCamel(sourceTable?lower_case,true?string)}Entity> getList(Map<String,Object> filter) throws Exception;

    /**
    * 通过slq查询语句或执行存储过程,返回对应实体集合,会自动查询并填充实体里定义的其他实体对象或集合
    * @param commandType 执行类型[SQL语句或存储过程]
    * @param commandText SQL语句或存储过程名称
    * @param obj 执行参数
    * @return
    * @throws Exception
    */
    public List<C${underlineToCamel(sourceTable?lower_case,true?string)}Entity> getListBySql(CommandType commandType, String commandText, Object... obj) throws Exception;

    /**
    * 根据过滤条件和排序字段，得到对应页码和每页条目数的 PageInfo对象
    * @param filter 过滤条件的Map键值对
    * @param sorter 排序的Map键值对
    * @param pageIndex 显示的当前页码
    * @param pageSize 每页显示的记录条数
    * @return 分页后的数据对象集合：PageInfo对象
    * @throws Exception
    */
    public PageInfo<C${underlineToCamel(sourceTable?lower_case,true?string)}Entity> getPageInfo(Map<String,Object> filter,Map<String,String> sorter,Integer pageIndex,Integer pageSize) throws Exception;

    /**
     * 通用的搜索方法，返回实体对象的分页对象。
     * @param parameter 查询参数对象
     * @return 查找到的实体对应的分页对象
     * @throws Exception
     */
    public PageInfo<C${underlineToCamel(sourceTable?lower_case,true?string)}Entity> searchEntityPageInfo(AccessParameter parameter) throws Exception;

    /**
	 * 通过Id查找对应的商业实体对象
	 * @param id 商业实体对象的Id
	 * @return 单个实体对象
	 * @throws Exception
	 */
	public C${underlineToCamel(sourceTable?lower_case,true?string)}Entity getEntityById(String id) throws Exception;

    /**
    * 根据ids,批量查询实体集合
    * @param ids
    * @return 实体集合
    * @throws Exception
    */
    public List<C${underlineToCamel(sourceTable?lower_case,true?string)}Entity> getEntityListByIds(List<? extends Serializable> ids) throws Exception;

	/**
	 * 将商业实体对象插入数据库
	 * @param entity 商业实体对象
	 * @return  插入成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean add(C${underlineToCamel(sourceTable?lower_case,true?string)}Entity entity) throws Exception;
	
	/**
	 * 将商业实体对象更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
	 * @param entity 商业实体对象
	 * @return  更新成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean update(C${underlineToCamel(sourceTable?lower_case,true?string)}Entity entity) throws Exception;

    /**
    * 将实体对象选择性字段(不为空的)更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
    * 只更新指定实体不为空的属性到数据库中
    * @param entity 实体对象
    * @return 返回成功或失败
    */
    public boolean updateWithSelective(C${underlineToCamel(sourceTable?lower_case,true?string)}Entity entity) throws Exception;

    /**
	 * 将商业实体对象从数据库中删除 (支持级联删除：需要在对应实体模型对象中标记级联删除实体对象 例： cascadeDeleteEntitys={A.class,B.class})
	 * @param entity 商业实体对象
	 * @return 删除成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean delete(C${underlineToCamel(sourceTable?lower_case,true?string)}Entity entity) throws Exception;
	
	/**
	 * 单纯的根据id的值从数据库中删除对应商业实体对象
	 * @param keyValue 商业实体对象的Id
	 * @return 删除成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean deleteByIdForSingle(Object keyValue) throws Exception;

    /**
    * 根据ids,批量删除实体对象集合，支持递归删除
    * @param ids 要删除的实体主键值的集合列表
    * @param recursive 是否需要级联删除
    * @return 返回成功或失败
    * @throws Exception
    */
    public boolean deleteBatchIds(List<? extends Serializable> ids, boolean recursive) throws Exception;

    /**
     * 根据ids,批量删除实体对象集合，执行该操作会递归删除级联实体对象
     * @param ids 要删除的实体主键值的集合列表
     * @return 返回成功或失败
     * @throws Exception
     */
    public boolean deleteBatchIds(List<? extends Serializable> ids) throws Exception;

    /**
     * 判断该实体对象在数据库中是否存在
     * @return 存在返回true 否则返回 false
     * @throws Exception
     */
    public boolean hasExist(C${underlineToCamel(sourceTable?lower_case,true?string)}Entity entity) throws Exception;

}